//call、apply、bind 是Function.prototype下的方法，作用是执行一下目标函数，执行时顺便把目标函数中的this改一下，然后把结果输出，执行后，不会影响原函数！  
//apply 、 call 、bind 三者都是用来改变函数的this对象的指向的；
// apply 、 call 、bind 三者第一个参数都是this要指向的对象，也就是想指定的上下文（函数的每次调用都会拥有一个特殊值——本次调用的上下文（context）——这就是this关键字的值。）；
// 
// apply 、 call 、bind 三者都可以利用后续参数传参；
// 
// bind是返回对应函数，便于稍后调用；apply、call则是立即调用 。
// 
// func.call(this, arg1, arg2);call传递序列参数
// 
// func.apply(this, [arg1, arg2])//apply传递数组

//func.bind(thisArg[, arg1[, arg2[, ...]]])

//Function.prototype.call
const details = {
	message: 'Hello World!'
};

function getMessage(model) {0
	return this.message + model
}

getMessage.call(details,['models']) //'Hello World!models'

//Function.prototype.apply
const person = {
  name: "Marko Polo"
};

function greeting(greetingMessage,add) {
  return `${greetingMessage} ${add} ${this.name}`;
}

console.log(greeting.apply(person, ['Hello','adder'])); // "Hello adder Marko Polo"



var person = {
	name:'twy'
}

var getName = function(a,b) {
	console.info(this.name,a,b)
}.bind(person , 'p1','p2')

getName()  //twy  p1  p2
